/*
 * AbstractFontProvider.java
 *
 * Created on 2008/08/25 +0900
 *
 * $Revision: 38 $
 * $Date: 2008-10-11 08:48:45 +0000 (Sat, 11 Oct 2008) $
 */

package org.gikolet.framework.ui;

import org.gikolet.framework.util.Assert;

/**
 * @author tetsutaro (latest modification by $Author: tetsutaro.ss $)
 * @version $Revision: 38 $ $Date: 2008-10-11 08:48:45 +0000 (Sat, 11 Oct 2008) $
 */
public abstract class AbstractFontProvider implements FontProvider {
    private Font defaultFont;

    /**
     * この端末でのデフォルトフォントを返す。
     */
    public Font getDefaultFont() {
	// デフォルトフォントが設定されていなかったら作成する。
	if (this.defaultFont == null) {
	    this.defaultFont = createFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
		    Font.SIZE_MEDIUM);
	}
	return this.defaultFont;
    }

    /**
     * この端末でのデフォルトフォントを設定する。
     */
    public void setDefaultNativeFont(Font font) {
	Assert.isNotNull(font);

	this.defaultFont = font;
    }

    public boolean isSupportedFontSize(int fontSize) {
	switch (fontSize) {
	    case Font.SIZE_LARGE:
	    case Font.SIZE_MEDIUM:
	    case Font.SIZE_SMALL:
	    case Font.SIZE_TINY:
		return true;
	    default:
		if (fontSize <= 0) {
		    throw new IllegalArgumentException(fontSize + " is Invalid fontSize.");
		}
	}

	if (isSupportedFreeFontSize()) {
	    return true;
	}

	int[] fontSizes = getSupportedFontSizes();
	for (int i = 0; i < fontSizes.length; i++) {
	    if (fontSizes[i] == fontSize) {
		return true;
	    }
	}
	return false;
    }

    public boolean isSupportedFreeFontSize() {
	return false;
    }

    /**
     * サポートする物理的なフォントサイズを返す。
     */
    public int[] getSupportedFontSizes() {
	return new int[0];
    }
}
